In a flash memory system, garbage collection is performed to allow pages that have been marked invalid (e.g., due to a deletion) to be erased and subsequently written to again. For example, when a block includes multiple invalid pages as well as one or more valid pages, a garbage collection read command may be used to retrieve the data from the valid pages of the block. A garbage collection write command may then be used to write the data retrieved from the valid pages to one or more pages of one or more other blocks. The entire block from which the data was retrieved may then be erased and made available to be written to again.